<?php

/**
 * acceso_sist_client actions.
 *
 * @package    comande
 * @subpackage acceso_sist_client
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class acceso_sist_clientActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */

  public function executeLoginForToken(sfWebRequest $request)
    {

         $request->setRequestFormat('xml');
         $user_ecodigo = $request->getParameter('codigo');
         $user_token = $request->getParameter('token');

         $lib        = new myLib();
         try
         {

             $new_criteria = new Criteria();
             $new_criteria->add(UsuarioPeer::ID, $user_ecodigo);
             $new_criteria->add(UsuarioPeer::TOKEN, $user_token);
             $obj_usuario = UsuarioPeer::doSelectOne($new_criteria);

             if($obj_usuario != null)
             {

                    //verificas si el usuario acepto solicitud de grupo
                    $new_criteria = new Criteria();
                    $new_criteria ->add(UsuariosMonitoreadosPeer::USUARIO_ID, $obj_usuario->getId());
                    $new_criteria ->add(UsuariosMonitoreadosPeer::ESTADO, "1");
                    $OBJ_USUARIO_MONITOREADO = UsuariosMonitoreadosPeer::doSelectOne($new_criteria);

                    if(is_object($OBJ_USUARIO_MONITOREADO))
                    {
                        $fecha = date("Y-m-d H:i");
                        $utc_date = DateTime::createFromFormat(
                                        'Y-m-d G:i',
                                        $fecha,
                                        new DateTimeZone('UTC')
                        );

                        $nyc_date = $utc_date;
                        $nyc_date->setTimeZone(new DateTimeZone('America/Lima'));
                        $hora_server = $nyc_date->format('G:i');
                        $fecha_server = $nyc_date->format('Y-m-d');

                        $new_criteria->clear();
                        $new_criteria->add(SessionStartTimePeer::USER_MONITOREADO_ID, $OBJ_USUARIO_MONITOREADO->getId());
                        $new_criteria->add(SessionStartTimePeer::FECHA_SESION,$fecha_server );

                        $obj_sesion = SessionStartTimePeer::doSelectOne($new_criteria);
                        if(is_object($obj_sesion))
                        {

                            $json = $obj_sesion->getHoraInicio();

                            if($json!=null)
                            {
                                $obj = json_decode($json);
                                $lista_horas_incio = array();
                                foreach ($obj->{'1'} as $row)
                                {
                                    foreach($row as $file)
                                    {
                                     $lista_horas_incio[] =  $file;
                                    }

                                }
                                $lista_horas_incio[] = $hora_server;
                                $json_2 = json_encode(array("1"  => array('inicio_sesion' => $lista_horas_incio )  )  );

                                $obj_sesion->setHoraInicio($json_2);
                                $obj_sesion->save();
                            }
                            else
                            {
                                $json_2 = json_encode(array("1"  =>
                                                        array( 'inicio_sesion' => $hora_server )
                                                           )
                                                      );
                                $obj_sesion->setHoraInicio($json_2);
                                $obj_sesion->save();
                            }
                        }
                        else
                        {
                          $new_registro_sesion_clientes = new SessionStartTime();
                          $new_registro_sesion_clientes->setUserMonitoreadoId($OBJ_USUARIO_MONITOREADO->getId());
                          $new_registro_sesion_clientes->setFechaSesion($fecha_server);

                          $lista_hora_inicio = array();
                          $lista_hora_inicio[] = $hora_server;
                          $json = json_encode(array( "1"  => array(
                                                'inicio_sesion' => $lista_hora_inicio)) );
                          $new_registro_sesion_clientes->setHoraInicio($json);
                          $new_registro_sesion_clientes->setObservaciones("Registro Exito");
                          $new_registro_sesion_clientes->save();
                        }

                          $token = $lib->executeAutogenerarCadena();
                          $token = md5($token);
                          $obj_usuario->setToken($token);
                          $obj_usuario->save();

                          $fecha    = date("Y-m-d H:i");
                          $utc_date = DateTime::createFromFormat('Y-m-d G:i',$fecha,new DateTimeZone('UTC'));
                          $nyc_date = $utc_date;
                          $nyc_date->setTimeZone(new DateTimeZone('America/Lima'));
                          $fechaHoraServer = $nyc_date->format('Y-m-d G:i:s');

                          $json = $OBJ_USUARIO_MONITOREADO->getFlagsConfiguracion();
                          $json = json_decode($json);
                          $this->code   = $obj_usuario->getId();
                          $this->email   = $obj_usuario->getEmail();
                          $this->token  = $token;
                          $this->tiempo = $json->{'tiempo_muestra'};
                          $this->fechaHora  = $fechaHoraServer;

                          return sfView::SUCCESS;

                }
                else
                {
                $this->code = "E0102";
                $this->token = null;
                $this->tiempo = null;
                return sfView::ERROR;
                }



           }
           else
           {
               $this->code = "E0102";
               $this->token = null;
               $this->tiempo = null;
               return sfView::ERROR;
           }
         } catch (Exception $exc) {
             $this->code = "E0104";
             $this->token = null;
             $this->tiempo = null;
             return sfView::ERROR;
         }






    }







  public function executeIndex(sfWebRequest $request)
  {


      $request->setRequestFormat('xml');
     //recibir parametros de visual studio

     //validadores
     $email_validador = new sfValidatorEmail();

     //parametros que recibo el .net
     $user_email = $request->getParameter('user');
     $user_pass = $request->getParameter('pass');
    // $token = $request->getParameter('token');

     //instancio una variable de la lib
      $lib = new myLib();

    //  if($token == md5("admin")){ //verifico que el token sea el correcto
          try {

 //valido que el usuario sea un correo electronicO

        try {
            $email_validador->clean($user_email);
           }catch(sfValidatorError $e){
             $this->code = "E0100";
             $this->token = null;
             $this->tiempo = null;
              return sfView::ERROR;
          }
              //verifico que el usuario exista
          $obj_usuario = $lib->executeValida_usuario_monitoreado($user_email);
       if( $obj_usuario != null){

          $user_pass  = md5($user_pass );
        //verifico si la contraseå?˜a es correcta
        if($user_pass == $obj_usuario->getPassword()){

            //verificas si el usuario acepto solicitud de grupo

            $new_criteria = new Criteria();
            $new_criteria ->add(UsuariosMonitoreadosPeer::USUARIO_ID, $obj_usuario->getId());
            $new_criteria ->add(UsuariosMonitoreadosPeer::ESTADO, "1");
            $OBJ_USUARIO_MONITOREADO = UsuariosMonitoreadosPeer::doSelectOne($new_criteria);

            if(is_object($OBJ_USUARIO_MONITOREADO))
            {

                $nyc_date = $utc_date;
                $nyc_date->setTimeZone(new DateTimeZone('America/Lima'));
                //$nyc_date->setTimeZone(new DateTimeZone('Africa/Johannesburg'));

                //echo $nyc_date->format('Y-m-d G:i');
                $hora_server = $nyc_date->format('G:i');
                $fecha_server = $nyc_date->format('Y-m-d');
                /*
                 * FIN
                 */

                $new_criteria->clear();
                $new_criteria->add(SessionStartTimePeer::USER_MONITOREADO_ID, $OBJ_USUARIO_MONITOREADO->getId());
                $new_criteria->add(SessionStartTimePeer::FECHA_SESION,$fecha_server );

                $obj_sesion = SessionStartTimePeer::doSelectOne($new_criteria);
                if(is_object($obj_sesion)){ //--> existe fecha y usuario

                    $json = $obj_sesion->getHoraInicio();

                    if($json!=null){ //--> si existe el json
                          //decodifico el json
                        $obj = json_decode($json);

                        $lista_horas_incio = array();
                        foreach ($obj->{'1'} as $row){
                              foreach($row as $file){
                            $lista_horas_incio[] =  $file;

                              }

                        }

                        $lista_horas_incio[] = $hora_server;

                        $json_2 = json_encode(
                            array(
                                        "1"  => array(
                                                            'inicio_sesion' => $lista_horas_incio
                                                                )

                                        )
                                );

                        // guardo el json
                        $obj_sesion->setHoraInicio($json_2);
                        $obj_sesion->save();
                            //trabajo con el json
                    }else{ //---> si esta vacio




                        $json_2 = json_encode(
                            array(
                                        "1"  => array(
                                                            'inicio_sesion' => $hora_server
                                                                )

                                        )
                                );

                        // guardo el json
                        $obj_sesion->setHoraInicio($json_2);
                        $obj_sesion->save();


                    }


                }else{ //----> se debera ingresar nuevo usuario
                 $new_registro_sesion_clientes = new SessionStartTime();
                 $new_registro_sesion_clientes->setUserMonitoreadoId($OBJ_USUARIO_MONITOREADO->getId());
                 $new_registro_sesion_clientes->setFechaSesion($fecha_server);
                 // guardar en json

              $lista_hora_inicio = array();
                 $lista_hora_inicio[] = $hora_server;
                 $json = json_encode(

                        array(
                           "1"  => array(
                                    'inicio_sesion' =>     $lista_hora_inicio
                                        )
                              )

                  );
                 $new_registro_sesion_clientes->setHoraInicio($json);
                 $new_registro_sesion_clientes->setObservaciones("Registro Exito");
                 $new_registro_sesion_clientes->save();

                }


            //agrego la fecha y hora de sesion de este usuario



            // modifico el token del usuario
            //llamar metodo de generacion de token
            $token = $lib->executeAutogenerarCadena();
            $token = md5($token);
            $obj_usuario->setToken($token);
            $obj_usuario->save();

            //obtengo el tiempo


               $fecha    = date("Y-m-d H:i");
               $utc_date = DateTime::createFromFormat('Y-m-d G:i',$fecha,new DateTimeZone('UTC'));
               $nyc_date = $utc_date;
               $nyc_date->setTimeZone(new DateTimeZone('America/Lima'));
               $fechaHoraServer = $nyc_date->format('Y-m-d G:i:s');



            $json = $OBJ_USUARIO_MONITOREADO->getFlagsConfiguracion();
            $json = json_decode($json);
            $this->code   = $obj_usuario->getId();
            $this->email   = $obj_usuario->getEmail();
            $this->token  = $token;
            $this->tiempo = $json->{'tiempo_muestra'};
            $this->fechaHora  = $fechaHoraServer;

                return sfView::SUCCESS;

            }else{
             $this->code = "E01022";
            $this->token = $obj_usuario->getId();
            $this->tiempo = null;
            return sfView::ERROR;

            }




        }else{
            $this->code = "E0105";
            $this->token = null;
            $this->tiempo = null;
            return sfView::ERROR;
        }
       }else{
            $this->code = "E01023";
            $this->token = null;
            $this->tiempo = null;
            return sfView::ERROR;
       }
     } catch (Exception $exc) {
         $this->code = "E0104";
         $this->token = null;
         $this->tiempo = null;
         return sfView::ERROR;
     }
   /* }else{
    $this->code = "E0103";
     return sfView::ERROR;
      }
     */

  }

   public function executeCerrarsesion(sfWebRequest $request)
  {
     $request->setRequestFormat('xml');

     //recibo datos de visual estudio

     $email_validador = new sfValidatorEmail();

     //parametros que recibo el .net
     $user_email = $request->getParameter('email');
     $token_user = $request->getParameter('token');
      // $token = $request->getParameter('token');
      // buscar el email para sacar el json y estructurarlo


     //instancio una variable de la lib
      $lib = new myLib();
      //$fecha = time("d/m/a");

      // busco el valido el email
       try {
            $email_validador->clean($user_email);
           }catch(sfValidatorError $e){
              return sfView::ERROR;
          }

      // busco al usuario por email
       $obj_usuario = $lib->executeValida_usuario_monitoreado($user_email);
      if(is_object($obj_usuario)){

      //busco al usuario monitoreado
            $new_criteria = new Criteria();
            $new_criteria ->add(UsuariosMonitoreadosPeer::USUARIO_ID, $obj_usuario->getId());
            $new_criteria ->add(UsuariosMonitoreadosPeer::ESTADO, "1");
            $OBJ_USUARIO_MONITOREADO = UsuariosMonitoreadosPeer::doSelectOne($new_criteria);

            if(is_object($OBJ_USUARIO_MONITOREADO)){ //---> si esta activo

                //busco el registro de la sesion


            //busco el registro correspondiente a la fecha :
                //$hora_envio_server = $result->tiempo_envio;
                //$hora_server = date("H:i:s");
                //$fecha_envio_server = $result->fecha_envio;
                //$fecha_server = date("Y-m-d");

                /*
                 * FECHA Y HORA ZONA HORARIA
                */

                $fecha = date("Y-m-d H:i");
                $utc_date = DateTime::createFromFormat(
                                'Y-m-d G:i',
                                $fecha,
                                new DateTimeZone('UTC')
                );

                $nyc_date = $utc_date;
                $nyc_date->setTimeZone(new DateTimeZone('America/Lima'));
                //$nyc_date->setTimeZone(new DateTimeZone('Africa/Johannesburg'));

                $fecha_server = $nyc_date->format('Y-m-d');
                $hora_server = $nyc_date->format('G:i');

                $new_criteria->clear();
                $new_criteria->add(SessionStartTimePeer::USER_MONITOREADO_ID, $OBJ_USUARIO_MONITOREADO->getId());
                $new_criteria->add(SessionStartTimePeer::FECHA_SESION,$fecha_server );

                $obj_sesion = SessionStartTimePeer::doSelectOne($new_criteria);
                if(is_object($obj_sesion)){ //--> existe fecha y usuario

                    $json = $obj_sesion->getHoraFin();

                    if($json!=null){ //--> si existe el json
                          //decodifico el json


                        $obj = json_decode($json);

                        $lista_horas_fin = array();
                        foreach ($obj->{'2'} as $row){
                             foreach($row as $file)
                            $lista_horas_fin[] =  $file;

                        }

                        $lista_horas_fin[] = $hora_server;

                        $json_2 = json_encode(
                            array(
                                        "2"  => array(
                                                            'fin_sesion' => $lista_horas_fin
                                                                )

                                        )
                                );

                        // guardo el json
                        $obj_sesion->setHoraFin($json_2);
                        $obj_sesion->save();
                            //trabajo con el json
                    }else{ //---> si esta vacio


                    $lista_fin_hora = array();
                   $lista_fin_hora[] = $hora_server;
                        $json_2 = json_encode(
                            array(
                                        '2'  => array(
                                                            'fin_sesion' =>$lista_fin_hora
                                                                )

                                        )
                                );

                        // guardo el json
                        $obj_sesion->setHoraFin($json_2);
                        $obj_sesion->save();


                    }


                }else{ //----> se debera ingresar nuevo registro de fin de sesion
                 $new_registro_sesion_clientes = new SessionStartTime();
                 $new_registro_sesion_clientes->setUserMonitoreadoId($OBJ_USUARIO_MONITOREADO->getId());
                 $new_registro_sesion_clientes->setFechaSesion($fecha_server);
                 // guardar en json



                 $json = json_encode(

                        array(
                           "2"  => array(
                                    'fin_sesion' => $hora_server
                                        )
                              )

                  );
                 $new_registro_sesion_clientes->setHoraFin($json);
                 $new_registro_sesion_clientes->setObservaciones("Registro Exito");
                 $new_registro_sesion_clientes->save();

                }

                return sfView::SUCCESS;


            }else{
                 return sfView::ERROR;
            }


      }else{
            return sfView::ERROR;
     }





   }

}
